//
//  VCPlayerManager.h
//  VCDemo
//
//  Created by 肖康龙 on 2018/3/8.
//  Copyright © 2018年 vsoontech. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
//#import <IJKMediaFramework/IJKMediaFramework.h>

// playerLayer的填充模式（默认：等比例填充，直到一个维度到达区域边界）
typedef NS_ENUM(NSInteger, VCPlayerLayerGravity) {
    VCPlayerLayerGravityResize,           // 非均匀模式。两个维度完全填充至整个视图区域
    VCPlayerLayerGravityResizeAspect,     // 等比例填充，直到一个维度到达区域边界
    VCPlayerLayerGravityResizeAspectFill  // 等比例填充，直到填充满整个视图区域，其中一个维度的部分区域会被裁剪
};

typedef NS_OPTIONS(NSUInteger, VCMPMovieLoadState) {
    VCMPMovieLoadStateUnknown        = 0,       //未知状态
    VCMPMovieLoadStatePlayable       = 1 << 0,  //加载状态变成了缓存数据足够开始播放，但是视频并没有缓存完全
    VCMPMovieLoadStatePlaythroughOK  = 1 << 1, // 加载状态变成了已经缓存完成，如果设置了自动播放，这时会自动播放
    VCMPMovieLoadStateStalled        = 1 << 2, // 加载状态变成了数据缓存停机不前，播放可能暂停
};

typedef NS_ENUM(NSInteger, VCMPMoviePlaybackState) {
    VCMPMoviePlaybackStateStopped,          //停止状态
    VCMPMoviePlaybackStatePlaying,          //播放状态
    VCMPMoviePlaybackStatePaused,           //暂停状态
    VCMPMoviePlaybackStateInterrupted,      //中断状态
    VCMPMoviePlaybackStateSeekingForward,   //向前拖动状态
    VCMPMoviePlaybackStateSeekingBackward   //向后拖动状态
};



@protocol VCPlayerManagerDelegate <NSObject>
@optional
/**
 *播放器准备完毕
 */

/**
 *加载状态改变回调
 */
-(void)PlayerloadStateChanged:(VCMPMovieLoadState)state;
/**
 *播放状态改变回调
 */
-(void)PlayerPlayStateChanged:(VCMPMoviePlaybackState)state;
/**
 *播放器播放播放完成或者播放错误的回调
 */
- (void)moviePlayBackFinishWithReason:(NSDictionary *)reason;
@end

@interface VCPlayerManager : NSObject

/**
 *代理
 */
@property (nonatomic,weak) id <VCPlayerManagerDelegate> delegate;
/**
 *播放器的Layer
 */
@property (strong, nonatomic) UIView *playerView;
/**
 *设置playerLayer的填充模式
 */
@property (nonatomic, assign) VCPlayerLayerGravity    playerLayerGravity;
/**
 *获取视频播放总时长(秒)
 */
@property(nonatomic, readonly)  NSTimeInterval duration;
/**
 *获取当前播放的时间点
 */
@property(nonatomic,readonly) NSTimeInterval currentPlaybackTime;
/**
 *  获取单例
 *  @return 该类的唯一实例
 */
+ (instancetype)defaultManager;
/**
 *播放视频的id
 *也是启动播放器
 */
-(void)downloadVideoWithId:(NSString *)linkId;
/**
 *设置当前播放时间点(用于seek操作)
 */
-(void)seekToTime:(NSTimeInterval)time;
/**
 *暂停播放
 */
-(void)pause;
/**
 *开始播放
 */
-(void)play;
/**
 *停止播放,停止播放会销毁播放资源,需要重新开启下载器
 */
-(void)stop;

@end

